package com.dycong.common.leetcode;

import java.util.ArrayList;
import java.util.List;

/**
 * 杨辉三角
 * 动态规划
 * @author dycong
 * @date 2019/12/10 8:57
 */
public class TriangleGenerate_118 {

    public static void main(String[] args) {
        TriangleGenerate_118 triangleGenerate_118 = new TriangleGenerate_118();
        System.out.println(triangleGenerate_118.generate(7));
    }


    public List<List<Integer>> generate(int numRows) {
        List<List<Integer>> triangle = new ArrayList<>();
        if (numRows <= 0) {
            return triangle;
        }
        List<Integer> firstRow = new ArrayList<>();
        firstRow.add(1);
        triangle.add(firstRow);

        for (int i = 1; i < numRows; i++) {
            List<Integer> row = new ArrayList<>();
            List<Integer> preRow = triangle.get(i - 1);
            row.add(1);
            //下一行第 i 个元素等于上一行的 i-1 与 i 之和
            for (int j = 1; j < i; j++) {
                row.add(preRow.get(j - 1) + preRow.get(j));
            }
            //将第一个 1 与最后一个 1 单独拿出来就不会有为 null 这种异常特殊情况
            row.add(1);
            triangle.add(row);
        }
        return triangle;
    }
}
